package com.ttai.untils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.ttai.golbal.MyApplication;
import com.ttai.model.dao.DBHelper;

import org.apache.commons.lang3.StringUtils;

import java.io.UnsupportedEncodingException;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import sun.misc.BASE64Decoder;

public class Constant {
//    public static final String BASE_URL = "https://www.ttaicloud.com/taisecurity/";
    public static final String BASE_URL = "http://106.12.35.248";
//    public static final String BASE_URL = "https://www.ttaicloud.com/TaiSecurity/";
//    public static final String BASE_URL = "http://192.168.43.50:8086";
    public static final String GET_ACOUNT_USER = "account/accountUse";
    public static final String APP_NAME = "newTs/appName";
    public static final String TOKEN_LOGIN = "ts/tokenLogin" ;
    public static final String VERIFT_CODE = "ts/sendMessage";
    public static final int VERSION = 7;
    public static final String LOGIN = "ts/login" ;
    public static final String REGISTER = "ts/register" ;
    public static final String LOGOUT = "ts/logout";
    public static final String ACOUNT_DELETE = "account/accountDelete";
    public static final String ACOUNT_ADD = "account/accountAdd";
    public static final String SET_KEY_TIP = "account/setKeyTip";
    public static final String SET_KEY = "account/setKey";
    public static final String ID_DELETE = "newTs/delete";
    public static final String ADD_APP = "newTs/add";
    public static final String OTP = "newTs/otpCreate";
    public static final String STORE_NEWACOUNT = "account/accountList";
    public static final String STORE_TIPACOUNT = "account/searchKeyTip";
    public static final String STORE_IDACOUNT = "newTs/refreashNewTs";
    public static final String IP_ERROR = "newTs/waitLogin";
    public static final String VERIFY_KEY = "account/keyVerify";
    public static final String VERIFY_LOGIN = "ts/securityVerify";
    public static final String VERIFT_MIYAO = "ts/secVerrify";
    public static final String TAI_REGISTER = "newTs/taiRegiser";
    public static final String GET_ACCOUNT = "account/updateKeySearch";
    public static final String NEW_MIYAO = "account/updateKey";
    public static final String QR_LOGIN = "newTs/qrLogin";
    public static final String SRP_ONE = "ts/srpFirst";
    public static final String SRP_TWO = "ts/srpSecond";
    public static final String SRP_THREE = "ts/srpThird";


    public static String PATTERN_FULL = "yyyy-MM-dd HH:mm:ss";
    public static String PATTERN_med = "yyyy-MM-dd HH:mm";
    public static String PATTERN_FULL_TRANSNO = "yyyyMMddHHmmss";
    public static String PATTERN_SHORT = "yyyy-MM-dd";
    public static String PATTERN_SHORTSS = "yyyyMMdd";

    public static String TAI_TOS = "欢迎您使用“态安全”隐私保护登录认证APP，为了使您获得便捷安全的服务，请仔细阅读下列服务约定条款：\n" +
            "一、服务条款的接受：\n" +
            "用户阅读本服务条款，点击“确定条款并注册”，完成注册的，即视为接受本服务条款的全部约定。\n" +
            "二、服务条款的变更和修改：\n" +
            "“态安全”APP有权依据国家政策及相关监管部门要求对服务条款进行修改，并公告所修改的内容。用户如果不同意服务条款的修改内容，可以主动注销已经获得的APP服务及账户，我们会删除用户的相关信息；如果用户继续使用本APP的服务，则视为用户已经接受服务条款的修改。\n" +
            "三、用户应遵守以下法律和法规：\n" +
            "1、用户同意遵守《中华人民共和国保守国家秘密法》、《中华人民共和国计算机信息系统安全保护条例》、《计算机软件保护条例》等相关计算机及互联网规定的法律和法规、实施办法，在任何情况下，APP合理地认为用户的行为可能违反上述法律、法规，本APP可以在任何时候，不事先通知，终止向用户提供服务，删除相关信息。\n" +
            "2、用户应了解国际互联网的无国界性，应特别注意遵守当地所有有关的法律和法规。\n" +
            "四、“态安全”APP提供的所有服务内容、账户和第三方企业接入信息，在未经“态安全”主体许可的情况下，不得提供给任何第三方使用。\n" +
            "五、“态安全”APP不保证所提供的个人首次托管登录验证信息完全准确，第三方接入企业应在个人用户首次托管时需自行核实核验，对未经核实而使用本APP信息而造成的任何损失或与第三方产生的任何纠纷，本公司不承担任何责任。\n" +
            "六、用户隐私制度：\n" +
            "用户注册“态安全”APP用户时，须提供必要的个人信息；本APP收集用户信息目的是为了有效建立用户认证中心、安全检测中心，是为了保证用户能够获得各第三方接入企业的有效业务服务，并建立有效认证。\n" +
            "“态安全”APP不会在未经合法授权时，公开、编辑或透露其个人信息及保存在本APP中的非公开内容，如登录认证记录、使用记录等但不仅限于此，除非有下列情况：\n" +
            "a、有关法律规定或本APP合法服务程序规定；\n" +
            "b、在紧急情况下，为维护用户及公众的利益；\n" +
            "c、为维护本APP的商标权；\n" +
            "d、其他需要公开、编辑或透露个人信息的情况；\n" +
            "七、用户中心帐号、密码和安全：\n" +
            "1、用户注册成功，即成为“态安全”APP合法用户，将得到一个态安全中心帐号，若进行“账户密码加密托管保护”功能，将会由用户自行设定一个高级校验密码。用户有义务保证帐号和密码的安全，用户应对利用该账号和密码所进行的一切活动负有全部责任，包括所衍生的任何损失和损害，本APP不承担任何责任。\n" +
            "2、用户的帐号和密码，遭到未授权的使用或发生任何其他安全问题，用户应立即联系本APP，但若用户忘记自己的高级校验密码，本公司无法进行找回，因为我们未存储用户的密码信息。\n" +
            "八、对用户信息的存储和限制：\n" +
            "“态安全”APP不对用户所发布信息的删除或添加失败负责，“态安全”APP有权判断用户的行为是否符合本服务条款规定的权利，如果“态安全”APP认为用户违背了服务条款的规定，本APP有权终止向其提供认证服务，并删除相关信息。\n" +
            "九、免责声明：\n" +
            "1、“态安全”APP对于任何通过本认证服务进行登录的第三方接入企业系统内所获得的任何内容、信息或广告，不声明或保证其正确性或可靠性；并且对于用户经本认证服务而进入第三方企业系统内所购买、获得的任何产品、服务信息或资料，“态安全”APP不负保证责任，用户自行承担使用第三方接入企业的服务风险。\n" +
            "2、“态安全”APP有权但无义务，改善或更正本APP服务任何部分之任何疏漏、错误。\n" +
            "3、“态安全”APP不保证（包括但不限于）：\n" +
            "a、本APP服务适合用户的使用要求。\n" +
            "b、本APP服务不受干扰，及时、安全、可靠或不出现错误，包括：黑客入侵、网络中断、电信问题及其他不可抗力的情形。\n" +
            "c、用户经由本APP服务获得的任何产品、服务符合用户的期望。\n" +
            "4、基于以下原因而造成的利润、商业信誉、资料损失或其他有形或无形损失，“态安全”APP不承担任何直接、间接、附带、衍生或惩罚性的赔偿：\n" +
            "a、“态安全”认证服务或无法使用。\n" +
            "b、经由“态安全”APP服务进入第三方接入企业购买或获得的任何产品、服务、资料。\n" +
            "c、用户资料遭到未授权的使用或修改。\n" +
            "d、其他与“态安全”APP服务相关的事宜。\n" +
            "十、服务的修改和终止：\n" +
            "“态安全”APP有权在任何时候，暂时或永久地修改或终止本服务（或任何一部分），无论是否通知，“态安全”APP对本服务的修改或终止对用户和任何第三人不承担任何责任。“态安全”APP有权基于任何合法合理的理由，终止用户中心帐号、密码和使用本APP服务，或删除、转移用户存储，“态安全”APP采取上述措施行为均不需通知，并且对用户和任何第三方承担任何责任。\n" +
            "十一、本服务条款规范用户使用本APP服务，将取代用户先前与“态安全”APP签署的任何协议。\n" +
            "十二、法律的适用和管辖：\n" +
            "本服务条款的生效、履行、解释及争议的解决，适用中华人民共和国法律，发生的争议提交上海市仲裁委员会，其仲裁裁决是终局的。本服务条款约定因为与中华人民共和国现行法律相抵触而导致部分无效的，不影响其他部分约定的效力。\n" +
            "\n" +
            "                                               \n" +
            "上海同态信息科技有限责任公司\n" +
            " 2019年1月11日";

    /**
     * MD5算法
     * @param scode
     * @return
     * @throws UnsupportedEncodingException
     * @throws NoSuchAlgorithmException
     */
    public static String mD5Code(String scode) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        String result ="";
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update((scode).getBytes("UTF-8"));
        byte b[] = md5.digest();
        int i;
        StringBuffer buf = new StringBuffer("");

        for (int offset = 0; offset < b.length; offset++) {
            i = b[offset];
            if (i < 0) {
                i += 256;
            }
            if (i < 16) {
                buf.append("0");
            }
            buf.append(Integer.toHexString(i));
            result=buf.toString();
        }
        return result;
    }

    /**
     * 获取手机MAC地址
     */
    public static String getMacAddress(){
        /*获取mac地址有一点需要注意的就是android 6.0版本后，以下注释方法不再适用，不管任何手机都会返回"02:00:00:00:00:00"这个默认的mac地址，这是googel官方为了加强权限管理而禁用了getSYstemService(Context.WIFI_SERVICE)方法来获得mac地址。*/
        //        String macAddress= "";
//        WifiManager wifiManager = (WifiManager) MyApp.getContext().getSystemService(Context.WIFI_SERVICE);
//        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//        macAddress = wifiInfo.getMacAddress();
//        return macAddress;

        String macAddress = null;
        StringBuffer buf = new StringBuffer();
        NetworkInterface networkInterface = null;
        try {
            networkInterface = NetworkInterface.getByName("eth1");
            if (networkInterface == null) {
                networkInterface = NetworkInterface.getByName("wlan0");
            }
            if (networkInterface == null) {
                return "02:00:00:00:00:02";
            }
            byte[] addr = networkInterface.getHardwareAddress();
            for (byte b : addr) {
                buf.append(String.format("%02X:", b));
            }
            if (buf.length() > 0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            macAddress = buf.toString();
        } catch (SocketException e) {
            e.printStackTrace();
            return "02:00:00:00:00:02";
        }
        return macAddress;
    }

    /**
     * 异或加密算法
     * @param str1
     * @param str2
     * @return
     */

    public static String twoStringXor(String str1, String str2) {
        byte b1[] = str1.getBytes();
        byte b2[] = str2.getBytes();
        byte longbytes[],shortbytes[];
        if(b1.length>=b2.length){
            longbytes = b1;
            shortbytes = b2;
        }else{
            longbytes = b2;
            shortbytes = b1;
        }
        byte xorstr[] = new byte[longbytes.length];

        int i = 0;
        for (; i < shortbytes.length; i++) {
            xorstr[i] = (byte)(shortbytes[i]^longbytes[i]);
        }
        for (;i<longbytes.length;i++){
            xorstr[i] = longbytes[i];
        }
        return new String(xorstr);
    }

    /**
     * 字符串转换unicode
     */
    public static String string2Unicode(String string) {

        StringBuffer unicode = new StringBuffer();

        for (int i = 0; i < string.length(); i++) {

            // 取出每一个字符
            char c = string.charAt(i);

            // 转换为unicode
            unicode.append("\\u" + Integer.toHexString(c));
        }

        return unicode.toString();
    }


    /**
     * unicode 转字符串
     */
    public static String unicode2String(String unicode) {

        StringBuffer string = new StringBuffer();

        String[] hex = unicode.split("\\\\u");

        for (int i = 1; i < hex.length; i++) {

            // 转换出每一个代码点
            int data = Integer.parseInt(hex[i], 16);

            // 追加成string
            string.append((char) data);
        }

        return string.toString();
    }


    public static String shaEncrypt(String strSrc) {
        MessageDigest md = null;
        String strDes = null;
        byte[] bt = strSrc.getBytes();
        try {
            md = MessageDigest.getInstance("SHA-256");// 将此换成SHA-1、SHA-512、SHA-384等参数
            md.update(bt);
            strDes = bytes2Hex(md.digest()); // to HexString
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        return strDes;
    }
    public static String bytes2Hex(byte[] bts) {
        String des = "";
        String tmp = null;
        for (int i = 0; i < bts.length; i++) {
            tmp = (Integer.toHexString(bts[i] & 0xFF));
            if (tmp.length() == 1) {
                des += "0";
            }
            des += tmp;
        }
        return des;
    }


    /**
     * 判断程序在前台或者后台
     * @param context
     * @return
     */
    public static boolean isBackground(Context context) {
        ActivityManager activityManager = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
                .getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.processName.equals(context.getPackageName())) {
                if (appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

                    return true;
                } else {

                    return false;
                }
            }
        }
        return false;
    }
    // 是否手机号
    public static boolean isMobile(String str) {
        if (StringUtils.isEmpty(str)){
            return false;
        }

        String regex = "(^1\\d{10}$)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.matches();
    }

    /**
     * 获取当前token值
     */
    public static String getToken(){
        String token = null;
        DBHelper dbHelper = DBHelper.getInstance(MyApplication.getContext());
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor cursor=db.rawQuery("select * from tokenacount",null);
        while (cursor.moveToNext()){
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            token=cursor.getString(cursor.getColumnIndex("token"));
        }
        cursor.close();
        return token;
    }

    /*
     * 将时间戳转换为时间字符串
     */
    public static String timeStampToDateStr(String s, String format)
    {
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        return res;
    }

    /**
     * 将 s 进行 BASE64 编码
     * @Param s
     * @return s
     */
    public static String getBASE64(String s) {
        if (s == null) {
            return null;
        }
        return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
    }

    /**
     * 将 BASE64 编码的字符串 s 进行解码
     * @Param s
     * @return String(b)
     */
    public static String getFromBASE64(String s) {
        if (s == null) {
            return null;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] b = decoder.decodeBuffer(s);
            return new String(b);
        } catch (Exception e) {
            return null;
        }
    }

    public static String getSrpKey(String keya,String keyb,String keyc,String keyd){
//        String keya = CommonUtil.getSrpfirstkey(10);
//        String keyb = CommonUtil.getSrpfirstkey(3);
//        String keyc = CommonUtil.getOnePwd(8);
//        String keyd = CommonUtil.getNum(1);
        String result = keya+":"+keyb+":"+keyc+":"+keyd+":"+keya;
        return result;
    }


    /**
     * 获取手机IMEI
     *
     * @param context
     * @return
     */
    public static final String getIMEI(Context context) {
        try {
            //实例化TelephonyManager对象
            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            //获取IMEI号
            @SuppressLint({"HardwareIds", "MissingPermission"}) String imei = telephonyManager.getDeviceId();
            //在次做个验证，也不是什么时候都能获取到的啊
            if (imei == null) {
                imei = "";
            }
            return imei;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }

    }

    /**
     * 获取手机IMSI
     */
    public static String getIMSI(Context context){
        try {
            TelephonyManager telephonyManager=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            //获取IMSI号
            @SuppressLint("MissingPermission") String imsi=telephonyManager.getSubscriberId();
            if(null==imsi){
                imsi="";
            }
            return imsi;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }


}
